/*
 * @lc app=leetcode.cn id=567 lang=cpp
 * @lcpr version=30204
 *
 * [567] 字符串的排列
 */

// @lcpr-template-start
using namespace std;
#include <algorithm>
#include <array>
#include <bitset>
#include <climits>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <queue>
#include <stack>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
// @lcpr-template-end
// @lc code=start
class Solution
{
public:
    bool checkInclusion(string s1, string s2)
    {
        // 滑动窗口
        unordered_map<int, int> hash;
        for (char c : s1)
            --hash[c - 'a'];
        for (int left = 0, right = 0; right < s2.size(); ++right)
        {
            ++hash[s2[right] - 'a'];
            while (hash[s2[right] - 'a'] > 0)
            {
                --hash[s2[left] - 'a'];
                ++left;
            }
            if (right - left + 1 == s1.size())
                return true;
        }
        return false;
    }
};
// @lc code=end

/*
// @lcpr case=start
// "eidbaooo"\n
// @lcpr case=end

// @lcpr case=start
// "eidboaoo"\n
// @lcpr case=end

 */
